package com.liujit.upms.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liujit.common.domain.params.BaseParams;
import com.liujit.common.domain.result.PageBean;
import com.liujit.upms.domain.model.SysOrg;
import com.liujit.upms.domain.params.SysOrgParams;
import com.liujit.upms.domain.query.SysOrgQuery;
import com.liujit.upms.domain.query.SysOrgTreeQuery;
import com.liujit.upms.domain.result.SysOrgResult;

import java.util.List;

/**
 * @Description 系统机构Service
 * @Author liujun
 * @Date 2021-07-02 15:00:39
 */
public interface SysOrgService extends IService<SysOrg> {

    /**
     * 根据系统机构分页查询条件，分页查询系统机构列表
     *
     * @param query 系统机构分页查询条件
     * @return 分页列表结果
     * @author: liujun
     * @date: 2021/6/23 5:02 下午
     */
    PageBean<SysOrgResult> getPage(SysOrgQuery query);

    /**
     * 根据系统机构添加/修改请求参数，添加/修改系统机构
     *
     * @param params 系统机构添加/修改请求参数
     * @return 添加/修改结果
     * @author: liujun
     * @date: 2021-07-02 15:00:39
     */
    Boolean save(SysOrgParams params);

    /**
     * 根据系统机构id，查询系统机构
     *
     * @param id 系统机构id
     * @return 查询结果
     * @author: liujun
     * @date: 2021-07-02 15:00:39
     */
    SysOrgResult get(Long id);

    /**
     * 根据系统机构id，查询系统机构详情
     *
     * @param id 系统机构id
     * @return 查询结果
     * @author: liujun
     * @date: 2021/7/8 9:30 上午
     */
    SysOrgResult getDetail(Long id);

    /**
     * 根据系统机构删除请求参数，删除系统机构
     *
     * @param params 系统机构删除请求参数
     * @return 删除结果
     * @author: liujun
     * @date: 2021-07-02 15:00:39
     */
    Boolean del(BaseParams params);

    /**
     * 根据系统机构启用请求参数，启用系统机构
     *
     * @param params 系统机构启用请求参数
     * @return 启用结果
     * @author: liujun
     * @date: 2021-07-02 15:00:39
     */
    Boolean enabled(BaseParams params);

    /**
     * 根据系统机构禁用请求参数，禁用系统机构
     *
     * @param params 系统机构禁用请求参数
     * @return 禁用结果
     * @author: liujun
     * @date: 2021-07-02 15:00:39
     */
    Boolean disabled(BaseParams params);

    /**
     * 获取树形结构
     *
     * @param query 系统机构树查询条件
     * @return
     * @author: liujun
     * @date: 2021/7/4 9:41 下午
     * q
     */
    List<Tree<Long>> getTree(SysOrgTreeQuery query);

    /**
     * 根据机构id，获取机构名称
     *
     * @param id 机构id
     * @return 机构名称
     * @author: liujun
     * @date: 2021/7/8 9:34 上午
     */
    String getNameById(Long id);
}
